package test.account;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import hyl.core.db.MyDB;


public class TradeDao extends AccountDao {

	public TradeDao(MyDB db) {
		super(db);
	}

	// 添加账户科目
	public void insert科目(String 科目, String 上级科目, String 备注) {
		Object[] ps = new Object[3];
		ps[0] = 科目;
		ps[1] = 上级科目;
		ps[2] = 备注;
		String sql = "insert into km_finance(subjid,psubjid,remark) value (?,?,?)";
		_db.executeUpdate(sql, ps);
	}

	// 设置账户科目状态
	public void set科目状态(char 状态, String 科目) {
		Object[] ps = new Object[2];
		ps[0] = 状态;
		ps[1] = 科目;
		String sql = "udpate km_finance set state=? where subjid=?";
		_db.executeUpdate(sql, ps);
	}

	public void insert商品(String 项目类型,String 交易项目,int 积分, int 排序,  BigDecimal 一级积分系数,
			BigDecimal 二级积分系数, BigDecimal 三级积分系数, BigDecimal 一级折扣, BigDecimal 二级折扣, BigDecimal 三级折扣, BigDecimal 售价,
			BigDecimal 进价, BigDecimal 重量, BigDecimal 体积, String 规格, String 型号, String 颜色, String 计量单位, String 换算单位, String 产地,
			String 图片链接, String 描述) {
		Object[] ps1 = new Object[2];
		ps1[0] = 交易项目;
		ps1[1] = 项目类型;
		String sql1 = "insert into km_project(itemname,itemtypes) value (?,?)";
	  long	itemid=  _db.executeUpdate(sql1,ps1);
	  replace商品属性(itemid,积分,排序,0,0,0,0,一级积分系数,二级积分系数,三级积分系数,一级折扣,二级折扣,三级折扣,售价,进价,重量,体积,规格,型号,颜色,计量单位,换算单位,产地,图片链接,描述);
		
	}
	public void replace商品属性(Long itemid,int 积分, int 排序, int 推荐人数, int 点击数, int 购买数, int 退换数, BigDecimal 一级积分系数,
			BigDecimal 二级积分系数, BigDecimal 三级积分系数, BigDecimal 一级折扣, BigDecimal 二级折扣, BigDecimal 三级折扣, BigDecimal 售价,
			BigDecimal 进价, BigDecimal 重量, BigDecimal 体积, String 规格, String 型号, String 颜色, String 计量单位, String 换算单位, String 产地,
			String 图片链接, String 描述) {
		Object[] ps = new Object[25];
		ps[0] = itemid;
		ps[1] = 积分;
		ps[2] = 排序;
		ps[3] = 推荐人数;
		ps[4] = 点击数;
		ps[5] = 购买数;
		ps[6] = 退换数;
		ps[7] = 一级积分系数;
		ps[8] = 二级积分系数;
		ps[9] = 三级积分系数;
		ps[10] = 一级折扣;
		ps[11] = 二级折扣;
		ps[12] = 三级折扣;
		ps[13] = 售价;
		ps[14] = 进价;
		ps[15] = 重量;
		ps[16] = 体积;
		ps[17] = 规格;
		ps[18] = 型号;
		ps[19] = 颜色;
		ps[20] = 计量单位;
		ps[21] = 换算单位;
		ps[22] = 产地;
		ps[23] = 图片链接;
		ps[24] = 描述;
		StringBuilder sql = new StringBuilder("replace into km_project_ext(");
		sql.append("itemid,i0,i1,i2,i3,i4,i5,");
		sql.append("n0,n1,n2,n5,n6,n7,nm0,nm1,nm2,nm3,");
		sql.append("t0,t1,t2,t3,t4,ts0,ts1,tl0)values(");
		sql.append("?,?,?,?,?, ?,?,?,?,? ,?,?,?,?,?, ?,?,?,?,?, ?,?,?,?,?)");
		_db.executeUpdate(sql.toString(), ps);
	}
	// 启用/禁用交易项目
	public void set商品状态(char 状态, String 项目) {
		Object[] ps = new Object[2];
		ps[0] = 状态;
		ps[1] = 项目;
		String sql = "udpate km_project set state=? where itemid=?";
		_db.executeUpdate(sql, ps);
	}

	// 添加交易明细到购物车
	public Long insert购物车( String 项目, String 甲方, String 乙方, Long 数量, BigDecimal 折扣,
			String 备注) {		
		 Map<String, Object> mp=_db.queryMap("select a.itemid,b.nm0 sj,b.nm1 jj from km_project a,km_project_ext b where a.itemid=b.itemid and a.itemname=?",new Object[]{项目});

	  BigDecimal 价格 =(BigDecimal) mp.get("sj");
	  BigDecimal 金额=价格.multiply(BigDecimal.valueOf(数量));
	  if(折扣!=null)
	  	金额= 金额.multiply(折扣);
	return   insert购物车((int)mp.get("itemid"),甲方,乙方,金额,价格,数量,备注);
	}
	
	public Long insert购物车( int 项目, String 甲方, String 乙方, BigDecimal 金额, BigDecimal 价格, Long 数量,
			String 备注) {		
		Object[] ps = new Object[7];	
		ps[0] = 项目;
		ps[1] = 甲方;
		ps[2] = 乙方;
		ps[3] = 金额;
		ps[4] = 价格;
		ps[5] = 数量;
		ps[6] = 备注;
		String sql = "insert into book_project_tmp(ctime,itemid,auser,buser,je,jg,num,remark) values(now(),?,?,?,?,?,?,?)";
		return _db.executeUpdate(sql, ps);
	}

	// 直接下单,不添加到购物车
	public void insert交易清单(Date 时间, String 订单流水号, String 项目, String 甲方, String 乙方, BigDecimal 金额, BigDecimal 价格,
			Long 数量, String 备注) {
		Object[] ps = new Object[9];
		ps[0] = 时间;
		ps[1] = 订单流水号;
		ps[2] = 项目;
		ps[3] = 甲方;
		ps[4] = 乙方;
		ps[5] = 价格;
		ps[6] = 金额;
		ps[7] = 数量;
		ps[8] = 备注;
		String sql = "insert into book_project(ctime,flowid,itemid,auser,buser,je,num,remark) values(now(),?,?,?,?,?,?,?)";
		_db.executeUpdate(sql, ps);
	}

	// 合计订单明细
	public void sum交易清单(String 订单流水号, String 操作员, Long linkid, String 备注) {
		Object[] ps = new Object[4];
		ps[0] = linkid;
		ps[1] = 操作员;
		ps[2] = 备注;
		ps[3] = 订单流水号;
		String sql = "INSERT INTO flow_link2 (partkey,linkid,t0,t1,t2,dt0,nm0,tm0) select extract(YEAR_MONTH FROM now()),?,?,auser,buser,now(),sum(je),? from book_project "
				+ "where flowid=? group by auser,buser";
		_db.executeUpdate(sql, ps);
	}

	// 购物车插入到交易明细
	public void turnto交易清单(String 订单流水号, List<Object[]> 购物车流水号) {
		String sql = "insert into book_project(ctime,flowid,itemid,auser,buser,je,num,remark) select now() ctime,'" + 订单流水号
				+ "',itemid,auser,buser,je,num,remark from book_project_tmp where tmpid=?";
		_db.batch(sql, 购物车流水号);
	}

	// 删除购物车明细
	public void del购物车明细(Long 购物车流水号) {
		String sql = "delete from book_project_tmp where tmpid=" + 购物车流水号;
		_db.executeUpdate(sql);
	}

	// 插入流水环节记录附表
	public void insert环节_通用(Long linkid, String 操作员, String 甲方, String 乙方, BigDecimal 金额, String 备注) {
		// (流水号,环节,操作员 t0,甲方 t1,乙方 t2,金额 ns0,备注 tl0)
		String sql = "INSERT INTO flow_link2 (partkey,linkid,t0,t1,t2,nm0,tm0,dt0) "
				+ "values (extract(YEAR_MONTH FROM now()),?,?,?,?,?,?,now())";
		
		Object[] ps = new Object[6];
		ps[0] = linkid;
		ps[1] = 操作员;
		ps[2] = 甲方;
		ps[3] = 乙方;
		ps[4] = 金额;
		ps[5] = 备注;
		_db.executeUpdate(sql, ps);
	}

	// 插入流水环节记录附表
	public void insert环节_发货(Long linkid, String 操作员, String 甲方, String 乙方, String 发货地址, Date 发货日期, String 收货地址,
			BigDecimal 快递费, Integer 总件数, String 发货凭证, String 备注) {
		String sql = "INSERT INTO flow_link2 (partkey,linkid,dt0,il0,nm0,t0,t1,t2,t3,t4,ts0,tm0)"
				+ "values (extract(YEAR_MONTH FROM now()),?,?,?,?,? ,?,?,?,?,?,?)";
		Object[] ps = new Object[11];
		ps[0] = linkid;
		ps[1] = 发货日期;
		ps[2] = 总件数;
		ps[3] = 快递费;
		ps[4] = 操作员;
		ps[5] = 甲方;
		ps[6] = 乙方;
		ps[7] = 发货地址;
		ps[8] = 收货地址;
		ps[9] = 发货凭证;
		ps[10] = 备注;
		_db.executeUpdate(sql, ps);
	}


	// public void insertTradeItemAttr(Object[] obj) {
	// String sql = "insert into
	// km_project_ext(itemid,i0,i1,i2,i3,i4,i5,i6,i7,i8,i9"
	// + " ,il0,il1,il2,dl0,dl1,dl2,ns0,ns1,ns2,ns3,ns4,ns5,ns6,ns7,ns8,ns9"
	// + "
	// ,nl0,nl1,nl2,nl3,nl4,t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,tl0,tl1,tl2,td0,td1,td2)"
	// + "
	// values{?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?}";
	// _db.executeUpdate(sql, obj);
	// }
	// 查询购物车明细
	public List<List<Object>> select购物车(Map<String, Object> ps) {
		StringBuilder sql = new StringBuilder("select * from book_project_tmp  where 1=1 ");
		List<Object> objs = new ArrayList<Object>();
		if (ps == null || ps.isEmpty()) {
			sql.append("limit ").append(pagesize);
		} else {
			Object p1 = ps.get("userid");
			if (p1 != null) {
				sql.append("and userid = ?");
				objs.add(p1);
			}
			if (ps.containsKey("rs_index")) {
				sql.append("limit ?,").append(pagesize);
				objs.add(ps.get("rs_index"));
			} else {
				sql.append("limit ").append(pagesize);
			}
		}
		List<List<Object>> d = _db.queryList2D(sql.toString(), objs.toArray());
		return d;
	}

	// 查询订单明细
	public List<List<Object>> select交易清单(Map<String, Object> ps) {
		StringBuilder sql = new StringBuilder("select * from book_project where 1=1 ");
		List<Object> objs = new ArrayList<Object>();
		if (ps == null || ps.isEmpty()) {
			sql.append("limit ").append(pagesize);
		} else {
			Object p1 = ps.get("flowid");
			if (p1 != null) {
				sql.append("and flowid = ?");
				objs.add(p1);
			}
			if (ps.containsKey("rs_index")) {
				sql.append("limit ?,").append(pagesize);
				objs.add(ps.get("rs_index"));
			} else {
				sql.append("limit ").append(pagesize);
			}
		}
		List<List<Object>> d = _db.queryList2D(sql.toString(), objs.toArray());
		return d;
	}

	// 查询环节
	public List<List<Object>> select交易环节(Map<String, Object> ps) {
		StringBuilder sql = new StringBuilder(
				"select a.partkey mon,a.linkid,t0 opera,a.t1 auser,a.t2 buser,a.nm0 je,a.tm0 remark from flow_link2 a,flow_link b where a.linkid=b.linkid and b.lkname='乙方下订单' ");
		List<Object> objs = new ArrayList<Object>();
		if (ps == null || ps.isEmpty()) {
			sql.append("limit ").append(pagesize);
		} else {
			Object p1 = ps.get("opera");
			Object p2 = ps.get("flowid");
			Object p3 = ps.get("mon");
			if (p1 != null) {
				sql.append("and a.t0 = ?");
				objs.add(p1);
			}
			if (p2 != null) {
				sql.append("and b.flowid = ?");
				objs.add(p2);
			}
			if (p3 != null) {
				sql.append("and a.mon = ?");
				objs.add(p3);
			}
			if (ps.containsKey("rs_index")) {
				sql.append("limit ?,").append(pagesize);
				objs.add(ps.get("rs_index"));
			} else {
				sql.append("limit ").append(pagesize);
			}
		}
		List<List<Object>> d = _db.queryList2D(sql.toString(), objs.toArray());
		return d;
	}

	// 查询商品和属性明细
	public List<List<Object>> select商品属性(Map<String, Object> ps) {
		StringBuilder sql = new StringBuilder("select a.itemid,b.itemname,");
		sql.append("b.itemtypes,i0 jf,i1 px,i2 tjrs,i3 djs,i4 gms,i5 ths,");
		sql.append("n0 jfx1,n1 jfx2,n2 jfx3,n5 zk1,n6 zk2,n7 zk3,");
		sql.append("nm0 sj,nm1 jj,nm2 zl,nm3 tj,t0 gg,t1 xh,t2 ys,t3 jldw,");
		sql.append("t4 hsdw,ts0 tplj,tl0 ms");
		sql.append("	from km_project_ext a ,km_project b where");
		sql.append("	a.itemid=b.itemid  ");
		List<Object> objs = new ArrayList<Object>();
		if (ps == null || ps.isEmpty()) {
			sql.append("limit ").append(pagesize);
		} else {
			Object p1 = ps.get("itemname");
			Object p2 = ps.get("state");
			if (p1 != null) {
				sql.append("and b.itemname like  ?");
				objs.add('%' + p1.toString() + '%');
			}
			if (p2 == null)
				sql.append("and b.state = state");
			else {
				sql.append("and b.state = ?");
				objs.add(p2);
			}
			if (ps.containsKey("rs_index")) {
				sql.append("limit ?,").append(pagesize);
				objs.add(ps.get("rs_index"));
			} else {
				sql.append("limit ").append(pagesize);
			}
		}
		List<List<Object>> d = _db.queryList2D(sql.toString(), objs.toArray());
		return d;
 /*`itemid` int COMMENT '项目', `i0` int default 0 COMMENT '积分', `i1` int default
 0 COMMENT '排序', `i2` int default 0 COMMENT '推荐人数', `i3` int default 0 COMMENT
 '点击数', `i4` int default 0 COMMENT '购买数', `i5` int default 0 COMMENT '退换数',
 `n0` decimal(10,4) COMMENT '一级积分系数', `n1` decimal(10,4) COMMENT '二级积分系数',
 `n2` decimal(10,4) COMMENT '三级积分系数', `n5` decimal(10,4) COMMENT '一级折扣', `n6`
 decimal(10,4) COMMENT '二级折扣', `n7` decimal(10,4) COMMENT '三级折扣', `nm0`
 decimal(20,4) COMMENT '售价', `nm1` decimal(20,4) COMMENT '进价', `nm2`
 decimal(20,4) COMMENT '重量', `nm3` decimal(20,4) COMMENT '体积', `t0`
 VARCHAR(50) COMMENT '规格', `t1` VARCHAR(50) COMMENT '型号', `t2` VARCHAR(50)
 COMMENT '颜色', `t3` VARCHAR(50) COMMENT '计量单位', `t4` VARCHAR(50) COMMENT
 '换算单位', `ts0` VARCHAR(250) COMMENT '图片链接', `tl0` VARCHAR(1000) COMMENT
 '描述', */
	}

}
